#include "led.h"
#include "systimer.h"
#include "system.h"

static LED led[LED_NUM] = {
    {LED_LD1, 0, GPIOB, GPIO_PIN_12},
    {LED_LD2, 0, GPIOB, GPIO_PIN_13},
    {LED_LD3, 0, GPIOB, GPIO_PIN_14},
    {LED_LD4, 0, GPIOB, GPIO_PIN_15},
    {LED_LD5, 0, GPIOA, GPIO_PIN_8},
    {LED_LD6, 0, GPIOA, GPIO_PIN_9},
    {LED_LD7, 0, GPIOA, GPIO_PIN_10},
    {LED_LD8, 0, GPIOA, GPIO_PIN_11},
    {LED_LB1, 0, GPIOA, GPIO_PIN_1},
    {LED_LB2, 0, GPIOA, GPIO_PIN_2},
    {LED_LB3, 0, GPIOA, GPIO_PIN_3},
    {LED_LB4, 0, GPIOA, GPIO_PIN_4},
    {LED_LB5, 0, GPIOA, GPIO_PIN_12},
    {LED_LB6, 0, GPIOC, GPIO_PIN_14},
    // {LED_LB7, 0, GPIOA, GPIO_PIN_15},
    // {LED_LB8, 0, GPIOA, GPIO_PIN_0},
};

void led_init(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_GPIOB);
    for(uint8_t i = 0; i < LED_NUM; i++)
    {
        gpio_init(led[i].gpio_periph, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, led[i].pin);
        gpio_bit_reset(led[i].gpio_periph, led[i].pin);
    }
}

void led_set(uint8_t id, uint8_t state)
{
    if(state != led[id].state)
    {
        led[id].state = state;
        gpio_bit_write(led[id].gpio_periph, led[id].pin, (bit_status)led[id].state);
    }
}

uint8_t get_led_state(uint8_t id)
{
    return led[id].state;
}

void led_toogle(uint8_t id)
{
    led_set(id, !led[id].state);
}

// void led_test(void)
// {
//     for(uint8_t i = 0; i < LED_NUM; i++)
//     {
//         led_set((LedID)i, 1);
//     }
//     delay_ms(2000);
//     for(uint8_t i = 0; i < LED_NUM; i++)
//     {
//         led_set((LedID)i, 0);
//     }
//     delay_ms(2000);
// }
